// JavaScript Document

var gSelectedResults = [];
var gCurrentResults = [];



// Create our "tiny" marker icon
var gYellowIcon = new google.maps.MarkerImage(
	"http://labs.google.com/ridefinder/images/mm_20_yellow.png",
	new google.maps.Size(12, 20),
	new google.maps.Point(0, 0),
	new google.maps.Point(6, 20));
var gRedIcon = new google.maps.MarkerImage(
	"http://labs.google.com/ridefinder/images/mm_20_red.png",
	new google.maps.Size(12, 20),
	new google.maps.Point(0, 0),
	new google.maps.Point(6, 20));
var gSmallShadow = new google.maps.MarkerImage(
	"http://labs.google.com/ridefinder/images/mm_20_shadow.png",
	new google.maps.Size(22, 20),
	new google.maps.Point(0, 0),
	new google.maps.Point(6, 20));


 
/////////////////////////////////////////////////////////////////////
/////////// funzioni di ricerca su gmap /////////////////////////////
/////////////////////////////////////////////////////////////////////
 
function unselectMarkers() {
	for (var i = 0; i < gCurrentResults.length; i++) {
		gCurrentResults[i].unselect();
	}
	target = false;
}

// ricerca centrata sul marker dell'utente
function doSearch() {
	var request = {
		bounds: gMap.getBounds(),
		name: document.getElementById("queryInput").value
	};
	gLocalSearch.search(request, OnLocalSearch);
}
 
// Called when Local Search results are returned, we clear the old
// results and load the new ones.
function OnLocalSearch(results, status) {
	
	if (status != google.maps.places.PlacesServiceStatus.OK) return;
	
	var searchWell = document.getElementById("searchwell");
	
	// Clear the map and the old search well
	searchWell.innerHTML = "";
	for (var i = 0; i < gCurrentResults.length; i++) {
		gCurrentResults[i].marker().setMap(null);
	}
	// Close the infowindow
	gInfoWindow.close();
	
	gCurrentResults = [];
	for (var i = 0; i < results.length; i++) {
		gCurrentResults.push(new LocalResult(results[i]));
	}
}
 
// Cancel the form submission, executing an AJAX Search API search.
function CaptureForm(searchForm) {
	gLocalSearch.execute(searchForm.input.value);
	return false;
}
 
 
 
// A class representing a single Local Search result returned by the
// Google AJAX Search API.
function LocalResult(result) {
	var me = this;
	me.result_ = result;
	me.resultNode_ = me.node();
	me.marker_ = me.marker();
	google.maps.event.addDomListener(me.resultNode_, 'mouseover', function() {
		// Highlight the marker and result icon when the result is
		// mouseovered.  Do not remove any other highlighting at this time.
		me.highlight(true);
	});
	google.maps.event.addDomListener(me.resultNode_, 'mouseout', function() {
		// Remove highlighting unless this marker is selected (the info
		// window is open).
		if (!me.selected_) me.highlight(false);
	});
	google.maps.event.addDomListener(me.resultNode_, 'click', function() {
		me.select();
	});
	
	document.getElementById("searchwell").appendChild(me.resultNode_);
}

LocalResult.prototype.node = function() {
	if (this.resultNode_) return this.resultNode_;
	
	return this.html();
};
 
// Returns the GMap marker for this result, creating it with the given
// icon if it has not already been created.
LocalResult.prototype.marker = function() {
	var me = this;
	if (me.marker_) return me.marker_;
	var marker = me.marker_ = new google.maps.Marker({
		position: me.result_.geometry.location,
			icon: gYellowIcon, shadow: gSmallShadow, map: gMap});
	google.maps.event.addListener(marker, "click", function() {
		me.select();
	});
	
	return marker;
};
 
// Unselect any selected markers and then highlight this result and
// display the info window on it.
LocalResult.prototype.select = function() {
	unselectMarkers();
	this.selected_ = true;
	this.highlight(true);
	gInfoWindow.setContent(this.html(true));
	gInfoWindow.open(gMap, this.marker());
	target = this.result_.geometry.location;
	
	var arrivo = document.querySelector('#arrivo');
	var indirizzo_geo = codeLatLng(target);	
	if(indirizzo_geo) arrivo.value = indirizzo_geo;
};
 
LocalResult.prototype.isSelected = function() {
	return this.selected_;
};
 
// Remove any highlighting on this result.
	LocalResult.prototype.unselect = function() {
	this.selected_ = false;
	this.highlight(false);
};
 
// Returns the HTML we display for a result before it has been "saved"
LocalResult.prototype.html = function() {
	var me = this;
	var container = document.createElement("div");
	container.className = "unselected";
	var textNode = document.createTextNode(String(me.result_.name));
	container.appendChild(textNode);
	return container;
}
 
LocalResult.prototype.highlight = function(highlight) {
	this.marker().setOptions({icon: highlight ? gRedIcon : gYellowIcon});
	this.node().className = "unselected" + (highlight ? " red" : "");
}

